#!/bin/bash

# 如果当前用户不是 root，则使用 sudo 重新执行该脚本
if [ "$EUID" -ne 0 ]; then
    sudo "$0" "$@"
    exit
fi

SWAP_FILE="/swapfile"
SWAP_SIZE="4G"

# 1. 创建并启用 Swap 文件的函数
create_swap() {
    # 检查是否已有 Swap 文件
    if swapon --show | grep -q "$SWAP_FILE"; then
        echo "Swap 文件已经启用。"
        read -p "是否重新创建 Swap 文件？(y/n): " choice
        if [[ "$choice" != "y" ]]; then
            echo "跳过 Swap 文件的创建。"
            return  # 仅退出函数，继续执行脚本的其他部分
        fi
        echo "正在删除已有的 Swap 文件..."
        sudo swapoff $SWAP_FILE
        sudo rm -f $SWAP_FILE
    fi

    # 创建 Swap 文件
    echo "正在创建 $SWAP_SIZE 的 Swap 文件..."
    sudo fallocate -l $SWAP_SIZE $SWAP_FILE

    # 设置正确的权限
    sudo chmod 600 $SWAP_FILE
    echo "Swap 文件权限已设置为 600。"

    # 将文件标记为 Swap 区域
    sudo mkswap $SWAP_FILE
    echo "Swap 文件已标记为 Swap 区。"

    # 启用 Swap 文件
    sudo swapon $SWAP_FILE
    echo "Swap 文件已启用。"
}

# 2. 添加 Swap 文件到 /etc/fstab 的函数
add_swap_to_fstab() {
    # 检查 /etc/fstab 中是否已经存在 Swap 文件的配置
    if ! grep -q "$SWAP_FILE" /etc/fstab; then
        echo "$SWAP_FILE swap swap defaults 0 0" | sudo tee -a /etc/fstab
        echo "Swap 文件已添加到 /etc/fstab。"
    else
        echo "Swap 文件已经在 /etc/fstab 中。"
    fi
}

# 执行步骤
create_swap  # 调用创建 Swap 文件的函数
add_swap_to_fstab  # 调用将 Swap 文件添加到 /etc/fstab 的函数

# 3. 显示当前的 Swap 状态
echo "当前的 Swap 状态："
swapon --show
free -h

echo "Swap 创建和配置完成！"
